import Koa from 'koa' // 引入Koa web框架库
import R from 'ramda' // 引入JavaScript 函数式编程库Ramda

import config from '../config' // 引入配置文件
import utils from './utils' // 引入配置文件

const PORT = config.pro.port
/**
 * web服务启动类
 */
class Server {

  /**
   * Server构造器
   * 1、挂载web服务框架koa
   * 2、挂载中间件，并将web服务框架传入使用
   */
  constructor() {
    this.app = new Koa()
    this.useMiddleWares(this.app)(config.middleware)
  }
  /**
   * useMiddleWares 挂载中间件方法
   * @param {Object} app web服务对象
   * return 将中间件挂载到服务对象上
   */
  useMiddleWares(app) {
    return R.map(R.compose(
      R.map(i => i(app)),
      require,
      i => `${utils.resolve('src/middleware')}/${i}`
    ))
  }

  /**
   * start服务启动方法
   */
  async start() {
    this.app.listen(PORT, () => {
      console.log(`网站启用端口在: ${PORT}`);
    })

  }
}

// 创建web服务实例
const app = new Server()
app.start()
